#include <functional>
#include <vector>
#include <cstddef>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>

using Task = std::function<void()>;
class ThreadPool
{
public:
    explicit ThreadPool(size_t threads); // explicit防止隐式转换
    ~ThreadPool();
    void enQueueTask(const Task &task); // 向线程池中添加任务

private:
    std::vector<std::thread> _workers;  // 线程池中的工作线程
    std::queue<Task> _tasks;            // 任务队列
    std::mutex _queueMutex;             // 保护任务队列的互斥锁
    std::condition_variable _condition; // 条件变量，用于通知工作线程有新任务
    bool _stop;                         // 标志线程池是否停止

    void workerThread(); // 工作线程函数
};